import dayjs from 'dayjs'

/**
 * YYYY-MM-DD HH:mm:ss
 * @param dateStr 日期字符串或日期或时间戳， 默认当前日期
 * @returns 格式化后的字符串或 -
 */
export const useFormatDateYMDHms = (
  dateStr: string | Date | number = new Date()
) => {
  return dateStr ? dayjs(dateStr).format('YYYY-MM-DD HH:mm:ss') : '-'
}

/**
 * YYYY-MM-DD
 * @param dateStr 日期字符串或日期或时间戳， 默认当前日期
 * @returns 格式化后的字符串或 -
 */
export const useFormatDateYYYYMMDD = (
  dateStr: string | Date | number = new Date()
) => {
  return dateStr ? dayjs(dateStr).format('YYYY-MM-DD') : '-'
}

/**
 * YYYY-MM
 * @param dateStr 日期字符串或日期或时间戳， 默认当前日期
 * @returns 格式化后的字符串或 -
 */
export const useFormatDateYYYYMM = (
  dateStr: string | Date | number = new Date()
) => {
  return dateStr ? dayjs(dateStr).format('YYYY-MM') : '-'
}

/**
 * HH:mm:ss
 * @param dateStr 日期字符串或日期或时间戳， 默认当前日期
 * @returns 格式化后的字符串或 -
 */
export const useFormatDateHms = (
  dateStr: string | Date | number = new Date()
) => {
  return dateStr ? dayjs(dateStr).format('HH:mm:ss') : '-'
}

/**
 * HH:mm
 * @param dateStr 日期字符串或日期或时间戳， 默认当前日期
 * @returns 格式化后的字符串或 -
 */
export const useFormatDateHm = (
  dateStr: string | Date | number = new Date()
) => {
  return dateStr ? dayjs(dateStr).format('HH:mm') : '-'
}

/**
 * 获取格式化时间为设定时分秒（默认00:00:00）后的Date数据
 * @param dateStr 日期字符串或日期或时间戳， 默认当前日期
 * @param timeStr 时间字符串或小时数字 HH:mm:ss/H
 * @returns 格式化时间为设定时分秒后的Date数据
 */
export const useFormatToDate = (
  dateStr: string | Date | number = new Date(),
  timeStr?: string | number
) => {
  const date = dateStr || new Date()
  let hour = 0
  let minute = 0
  let second = 0
  if (typeof timeStr === 'string') {
    ;[hour, minute, second] = timeStr.split(':').map(Number)
    ;[hour, minute, second] = [hour, minute, second].map(item => item || 0)
  } else if (typeof timeStr === 'number') {
    hour = timeStr
  }
  return dayjs(date)
    .set('hour', hour)
    .set('minute', minute)
    .set('second', second)
    .toDate()
}
